Django একটি পাওয়ারফুল এবং জনপ্রিয় Python ওয়েব ফ্রেমওয়ার্ক যা দ্রুত এবং স্কেলেবল ওয়েব অ্যাপ্লিকেশন তৈরি করার জন্য ব্যবহৃত হয়। Django ব্যবহার করে আপনি দ্রুত প্রজেক্ট তৈরি করতে পারবেন এবং বিভিন্ন ধরনের কনফিগারেশন সেটিংস থেকে নিজের অ্যাপ্লিকেশনকে কাস্টমাইজ করতে পারবেন।
এই টিউটোরিয়ালে আমরা Django এর বেসিক কনফিগারেশন এর বিষয়টি আলোচনা করব। Django প্রজেক্ট শুরু করার পর আপনাকে কিছু সাধারণ কনফিগারেশন সেট করতে হয়, যা অ্যাপ্লিকেশনটির কাজ এবং এর নিরাপত্তা নিশ্চিত করে।
Django ইনস্টলেশন
প্রথমে, Django ইনস্টল করতে হবে। এটি Python এর প্যাকেজ ম্যানেজার pip ব্যবহার করে সহজেই ইনস্টল করা যায়।
pip install django
নতুন Django প্রজেক্ট তৈরি করা
Django এর একটি নতুন প্রজেক্ট তৈরি করতে django-admin startproject কমান্ড ব্যবহার করা হয়। এই কমান্ডটি Django ফ্রেমওয়ার্কের মূল ফোল্ডার তৈরি করে, যেখানে সমস্ত কনফিগারেশন ফাইল থাকবে।
django-admin startproject myproject
এতে myproject নামক একটি ফোল্ডার তৈরি হবে, যার মধ্যে কয়েকটি ডিফল্ট ফাইল থাকবে:
- manage.py: Django প্রজেক্টের বিভিন্ন কার্যক্রম পরিচালনার জন্য ব্যবহৃত কমান্ড লাইন স্ক্রিপ্ট।
- myproject/: প্রজেক্টের মূল ডিরেক্টরি, যা মূল কনফিগারেশন ফাইলগুলি ধারণ করে।
Django এর বেসিক কনফিগারেশন ফাইল
Django প্রজেক্টের কনফিগারেশন প্রধানত settings.py ফাইলে থাকে, যা Django প্রজেক্টের সমস্ত কনফিগারেশন এবং সেটিংস সংরক্ষণ করে। এটি myproject/ ডিরেক্টরির মধ্যে পাওয়া যায়।
১. DEBUG সেটিংস
DEBUG সেটিংটি Django এর ডিবাগ মোড নিয়ন্ত্রণ করে। প্রোডাকশন পরিবেশে এটি False রাখা উচিত, তবে ডেভেলপমেন্ট পরিবেশে True রাখা নিরাপদ। এটি ডিবাগ মোডে Django অ্যাপ্লিকেশনের ত্রুটি এবং ওয়েব পেজে বিস্তারিত ত্রুটি বার্তা দেখায়।
DEBUG = True # ডেভেলপমেন্টে True, প্রোডাকশনে False
২. ALLOWED_HOSTS
ALLOWED_HOSTS সেটিংটি Django অ্যাপ্লিকেশনের কোন ডোমেইন বা আইপি ঠিকানা থেকে HTTP অনুরোধ গ্রহণ করবে তা নির্ধারণ করে। এটি প্রোডাকশন পরিবেশে নিরাপত্তার জন্য গুরুত্বপূর্ণ।
ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'yourdomain.com']
৩. DATABASES
Django ডিফল্টভাবে SQLite ডেটাবেস ব্যবহার করে, তবে আপনি চাইলে এটি অন্য ডেটাবেস (যেমন PostgreSQL, MySQL) এ পরিবর্তন করতে পারেন। ডেটাবেস কনফিগারেশন DATABASES সেটিংসে থাকে।
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / "db.sqlite3",
}
}
আপনি যদি PostgreSQL ব্যবহার করতে চান, তাহলে নিম্নলিখিত কনফিগারেশনটি করতে হবে:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
}
}
৪. SECRET_KEY
SECRET_KEY হল একটি সিক্রেট কিপ, যা Django এর নিরাপত্তা ফিচার যেমন সেশন সিকিউরিটি এবং CSRF (Cross-Site Request Forgery) সুরক্ষায় ব্যবহৃত হয়। এটি একটি অত্যন্ত গুরুত্বপূর্ণ কনফিগারেশন এবং এটি কোনওভাবেই পাবলিকভাবে শেয়ার করা উচিত নয়।
SECRET_KEY = 'your-very-secret-key'
৫. STATIC_URL এবং MEDIA_URL
Static files (যেমন CSS, JavaScript, ইমেজ) এবং media files (যেমন ইউজার আপলোড করা ফাইল) সার্ভ করার জন্য STATIC_URL এবং MEDIA_URL ব্যবহার করা হয়।
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
এছাড়া, প্রোডাকশন পরিবেশে স্ট্যাটিক ফাইলের জন্য STATIC_ROOT এবং মিডিয়া ফাইলের জন্য MEDIA_ROOT কনফিগার করতে হয়।
STATIC_ROOT = BASE_DIR / "static"
MEDIA_ROOT = BASE_DIR / "media"
৬. INSTALLED_APPS
INSTALLED_APPS সেটিংটি Django অ্যাপ্লিকেশনগুলো তালিকাভুক্ত করে। Django প্রজেক্টে ডিফল্টভাবে কয়েকটি অ্যাপ থাকে, যেমন django.contrib.admin, django.contrib.auth ইত্যাদি। আপনি নিজের তৈরি অ্যাপগুলোও এখানে যুক্ত করতে পারেন।
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp', # আপনার তৈরি অ্যাপ
]
৭. MIDDLEWARE
MIDDLEWARE সেটিংটি Django অ্যাপ্লিকেশনে ব্যবহৃত বিভিন্ন মিডলওয়্যার ক্লাসকে তালিকাভুক্ত করে। মিডলওয়্যার বিভিন্ন প্রক্রিয়ায় HTTP অনুরোধ ও প্রতিক্রিয়া প্রসেস করে, যেমন সেশন হ্যান্ডলিং, CSRF সুরক্ষা ইত্যাদি।
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
Django প্রজেক্ট চালানো
প্রজেক্ট কনফিগারেশন সম্পন্ন হওয়ার পর, আপনি manage.py ব্যবহার করে Django সার্ভার চালাতে পারবেন:
python manage.py runserver
এটি আপনার লোকালহোস্টে Django ডেভেলপমেন্ট সার্ভার চালাবে, যা আপনি ব্রাউজারে গিয়ে দেখতে পাবেন।
সারাংশ
Django এর বেসিক কনফিগারেশন সেটিংস সঠিকভাবে সেট করা একটি নিরাপদ এবং স্কেলেবল অ্যাপ্লিকেশন তৈরির জন্য অত্যন্ত গুরুত্বপূর্ণ। settings.py ফাইলে গুরুত্বপূর্ণ কনফিগারেশন সেটিংস যেমন DEBUG, ALLOWED_HOSTS, DATABASES, STATIC_URL, MEDIA_URL ইত্যাদি কনফিগার করা হয়। এই কনফিগারেশনগুলি সঠিকভাবে ব্যবহার করে আপনি নিরাপদ, স্কেলেবল এবং দ্রুত Django অ্যাপ্লিকেশন তৈরি করতে পারবেন।
Django প্রজেক্টের settings.py ফাইল হল আপনার প্রজেক্টের কনফিগারেশন ফাইল, যেখানে সমস্ত গুরুত্বপূর্ণ সেটিংস এবং প্যারামিটারগুলি সংরক্ষিত থাকে। এই ফাইলে Django অ্যাপ্লিকেশনটির কার্যক্রম পরিচালনার জন্য প্রয়োজনীয় বিভিন্ন কনফিগারেশন নির্দেশনা দেওয়া হয়, যেমন ডেটাবেস সেটিংস, অ্যাপ কনফিগারেশন, সিকিউরিটি সেটিংস, মিডিয়া এবং স্ট্যাটিক ফাইল কনফিগারেশন, তৃতীয় পক্ষের প্যাকেজ ইত্যাদি।
এটি মূলত আপনার Django অ্যাপ্লিকেশনটির কনফিগারেশন এবং পরিবেশ নির্ধারণ করে। চলুন, settings.py ফাইলের কিছু গুরুত্বপূর্ণ অংশ বিস্তারিতভাবে আলোচনা করি।
settings.py ফাইলের মূল অংশ
১. BASE_DIR
BASE_DIR সেটিংটি প্রজেক্টের মূল ডিরেক্টরির পথ নির্ধারণ করে। এটি আপনার প্রজেক্টের ফাইল সিস্টেমে অবস্থান জানাতে সাহায্য করে, যাতে অন্যান্য ফাইল বা ডিরেক্টরি সংক্রান্ত পথ গুলি রিলেটিভভাবে নির্ধারণ করা যায়।
BASE_DIR = Path(__file__).resolve().parent.parent
এটি Django প্রজেক্টের রুট ডিরেক্টরি (যেমন myblog/ ফোল্ডার) নির্দেশ করে।
২. DEBUG
DEBUG সেটিংটি আপনার Django অ্যাপ্লিকেশনটি ডেভেলপমেন্ট মোডে চলমান কিনা তা নির্ধারণ করে। যখন DEBUG সঠিকভাবে চালু থাকে (যা ডেভেলপমেন্ট পরিবেশে প্রয়োজন), তখন Django আপনাকে আরও ডিবাগ তথ্য এবং ত্রুটির স্ট্যাক ট্রেস দেখাবে।
DEBUG = True
এটি অবশ্যই উৎপাদন পরিবেশে False সেট করা উচিত। কারণ উৎপাদন পরিবেশে Debug মোড চালু রাখা নিরাপত্তার জন্য ঝুঁকিপূর্ণ।
৩. ALLOWED_HOSTS
ALLOWED_HOSTS হল একটি লিস্ট যেখানে আপনি আপনার অ্যাপ্লিকেশনটি যেসব হোস্ট বা ডোমেইনে চলতে চান তা নির্ধারণ করবেন। এটি নিরাপত্তার জন্য ব্যবহৃত হয়, যেখানে Django শুধুমাত্র নির্দিষ্ট হোস্টগুলির থেকে HTTP অনুরোধ গ্রহণ করে।
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
উৎপাদন পরিবেশে, এখানে আপনার ডোমেইন নাম অন্তর্ভুক্ত করতে হবে, যেমন example.com।
৪. INSTALLED_APPS
INSTALLED_APPS হল অ্যাপ্লিকেশনগুলির একটি তালিকা যেগুলি আপনার Django প্রজেক্টে ব্যবহৃত হবে। এখানে সমস্ত ডিফল্ট Django অ্যাপস (যেমন django.contrib.admin, django.contrib.auth ইত্যাদি) এবং আপনার নিজস্ব অ্যাপ্লিকেশন অন্তর্ভুক্ত থাকবে।
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
]
এখানে myapp হলো একটি কাস্টম অ্যাপ, যেটি আপনার Django প্রজেক্টে যুক্ত করা হয়েছে।
৫. MIDDLEWARE
MIDDLEWARE একটি তালিকা যেখানে Django অ্যাপ্লিকেশন চলাকালীন যে সমস্ত মধ্যস্থতাকারী প্রক্রিয়া (middleware) ব্যবহৃত হবে তা নির্ধারণ করা হয়। Middleware সাধারণত HTTP অনুরোধ এবং প্রতিক্রিয়া প্রক্রিয়ার মধ্যে কাজ করে, যেমন সেশনের হ্যান্ডলিং, নিরাপত্তা চেক, বা কুকি পরিচালনা।
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
৬. ROOT_URLCONF
ROOT_URLCONF সেটিংটি মূল URL কনফিগারেশন ফাইলের পথ নির্দেশ করে। এটি Django কে জানায় যে কোথায় আপনার URL রুট প্যাটার্নগুলি সংরক্ষিত আছে। সাধারণত এই সেটিংটির মান urls.py ফাইল থাকে।
ROOT_URLCONF = 'myblog.urls'
৭. TEMPLATES
Django একটি টেমপ্লেট ইঞ্জিন ব্যবহার করে, যা HTML ফাইলের মধ্যে Python কোড সংযুক্ত করতে সাহায্য করে। TEMPLATES সেটিংটি Django কে জানায় যে টেমপ্লেটগুলো কোথায় রয়েছে এবং কীভাবে সেগুলো রেন্ডার করা হবে।
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
৮. DATABASES
DATABASES সেটিংটি Django কে জানায় কোন ডেটাবেস ব্যবহৃত হবে এবং সেই ডেটাবেসের সংযোগ বিবরণ কী হবে। ডিফল্টভাবে, Django SQLite ডেটাবেস ব্যবহার করে, কিন্তু আপনি MySQL, PostgreSQL বা অন্য কোনো ডেটাবেস ব্যবহারের জন্য এই সেটিংটি কনফিগার করতে পারেন।
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
এখানে ENGINE হল ডেটাবেসের প্রকার, এবং NAME হল ডেটাবেসের অবস্থান।
৯. STATIC_URL এবং MEDIA_URL
Static files (যেমন CSS, JavaScript, ইমেজ) এবং media files (যেমন ইউজারের আপলোড করা ফাইল) কনফিগার করার জন্য STATIC_URL এবং MEDIA_URL ব্যবহার করা হয়।
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
এছাড়া আপনি static files এর জন্য STATICFILES_DIRS এবং media files এর জন্য MEDIA_ROOT সেটিংসও কনফিগার করতে পারেন।
উপসংহার
settings.py ফাইল Django প্রজেক্টের সব গুরুত্বপূর্ণ কনফিগারেশন সংরক্ষণের জন্য ব্যবহৃত হয়। এটি ডেটাবেস, অ্যাপ কনফিগারেশন, নিরাপত্তা, মিডিয়া ফাইল, এবং অন্যান্য সেটিংস নিয়ন্ত্রণ করে, যা Django অ্যাপ্লিকেশনটির কার্যক্রম সঠিকভাবে পরিচালনা করতে সাহায্য করে। Django প্রজেক্টের পুরো সেটআপ ও কাস্টমাইজেশন মূলত এই ফাইলের মাধ্যমে করা হয়, তাই এটি একেবারে গুরুত্বপূৰ্ণ।
Django ডিফল্টভাবে SQLite ডাটাবেস ব্যবহার করে, যা একটি হালকা ও সহজ ডাটাবেস সমাধান। তবে, Django আপনাকে বিভিন্ন ডাটাবেস ব্যবহারের সুবিধা দেয়, যেমন MySQL এবং PostgreSQL। এখানে আমরা Django প্রজেক্টে SQLite, MySQL, এবং PostgreSQL ডাটাবেস কনফিগারেশন কিভাবে করবেন, তা আলোচনা করব।
SQLite (ডিফল্ট ডাটাবেস)
Django প্রজেক্ট তৈরি করার সময় SQLite ডাটাবেস ডিফল্টভাবে কনফিগার করা থাকে। এটি একটি ফাইল-ভিত্তিক ডাটাবেস, যা সহজে ব্যবহৃত হয় ছোট প্রোজেক্ট এবং ডেভেলপমেন্ট পর্যায়ের জন্য।
১. SQLite ডাটাবেস কনফিগারেশন
Django-তে SQLite কনফিগারেশন ডিফল্টভাবে settings.py ফাইলে থাকে। এটি সাধারণত নিম্নরূপ থাকে:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
এখানে:
ENGINE: ডাটাবেসের ইঞ্জিন, যেটি SQLite।NAME: ডাটাবেসের নাম, যেখানেBASE_DIRআপনার প্রোজেক্টের রুট ডিরেক্টরি।
SQLite ডাটাবেসের ক্ষেত্রে কোনো আলাদা সার্ভার বা অতিরিক্ত কনফিগারেশন প্রয়োজন নেই। এটি আপনার প্রোজেক্টের রুট ফোল্ডারে একটি db.sqlite3 ফাইল তৈরি করে।
MySQL ডাটাবেস কনফিগারেশন
MySQL একটি জনপ্রিয় এবং শক্তিশালী রিলেশনাল ডাটাবেস, যা বৃহৎ এবং স্কেলেবল প্রোজেক্টগুলির জন্য ব্যবহৃত হয়। Django প্রজেক্টে MySQL ব্যবহার করতে হলে, আপনাকে কিছু অতিরিক্ত স্টেপ ফলো করতে হবে।
১. MySQL ইনস্টলেশন
প্রথমে MySQL ইনস্টল করতে হবে। আপনার অপারেটিং সিস্টেম অনুযায়ী এটি ইনস্টল করতে পারেন।
Ubuntu:
sudo apt-get install mysql-server- Windows/Mac: MySQL ডাউনলোড করতে MySQL এর অফিসিয়াল সাইটে যান এবং আপনার অপারেটিং সিস্টেম অনুযায়ী ইনস্টল করুন।
২. MySQL ড্রাইভার ইনস্টল করা
Django-কে MySQL ডাটাবেসের সাথে সংযোগ করতে mysqlclient অথবা PyMySQL ড্রাইভার ব্যবহার করা হয়।
mysqlclient ইনস্টল করতে:
pip install mysqlclientPyMySQL ইনস্টল করতে:
pip install PyMySQL
৩. MySQL কনফিগারেশন
settings.py ফাইলে DATABASES সেকশনে MySQL এর কনফিগারেশনটি এইভাবে করা হবে:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'your_database_name',
'USER': 'your_mysql_user',
'PASSWORD': 'your_mysql_password',
'HOST': 'localhost',
'PORT': '3306',
}
}
এখানে:
ENGINE: MySQL ডাটাবেস ইঞ্জিন।NAME: MySQL ডাটাবেসের নাম।USER: MySQL ব্যবহারকারীর নাম।PASSWORD: ব্যবহারকারীর পাসওয়ার্ড।HOST: সার্ভারের হোস্ট (সাধারণতlocalhost)।PORT: MySQL সার্ভারের পোর্ট (ডিফল্ট:3306)।
৪. MySQL ডাটাবেস তৈরি করা
MySQL এ একটি ডাটাবেস তৈরি করতে, MySQL শেলের মাধ্যমে নিচের কমান্ডটি চালান:
CREATE DATABASE your_database_name;
PostgreSQL ডাটাবেস কনফিগারেশন
PostgreSQL একটি শক্তিশালী, ওপেন সোর্স রিলেশনাল ডাটাবেস, যা অনেক বড় অ্যাপ্লিকেশন এবং বড় স্কেল প্রোজেক্টের জন্য উপযুক্ত।
১. PostgreSQL ইনস্টলেশন
PostgreSQL ইনস্টল করতে হলে, প্রথমে PostgreSQL ইনস্টল করতে হবে:
Ubuntu:
sudo apt-get install postgresql postgresql-contrib- Windows/Mac: PostgreSQL ডাউনলোড করতে PostgreSQL এর অফিসিয়াল সাইটে যান এবং আপনার অপারেটিং সিস্টেম অনুযায়ী ইনস্টল করুন।
২. PostgreSQL ড্রাইভার ইনস্টল করা
Django-কে PostgreSQL ডাটাবেসের সাথে সংযোগ করতে psycopg2 ড্রাইভার ব্যবহার করা হয়।
pip install psycopg2
৩. PostgreSQL কনফিগারেশন
PostgreSQL ডাটাবেস কনফিগারেশন settings.py ফাইলে হবে এইভাবে:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'your_database_name',
'USER': 'your_postgresql_user',
'PASSWORD': 'your_postgresql_password',
'HOST': 'localhost',
'PORT': '5432',
}
}
এখানে:
ENGINE: PostgreSQL ডাটাবেস ইঞ্জিন।NAME: PostgreSQL ডাটাবেসের নাম।USER: PostgreSQL ব্যবহারকারীর নাম।PASSWORD: ব্যবহারকারীর পাসওয়ার্ড।HOST: সার্ভারের হোস্ট (সাধারণতlocalhost)।PORT: PostgreSQL সার্ভারের পোর্ট (ডিফল্ট:5432)।
৪. PostgreSQL ডাটাবেস তৈরি করা
PostgreSQL এ একটি ডাটাবেস তৈরি করতে, PostgreSQL শেলের মাধ্যমে নিচের কমান্ডটি চালান:
CREATE DATABASE your_database_name;
মাইগ্রেশন এবং ডাটাবেস ব্যবহার শুরু করা
ডাটাবেস কনফিগারেশন সম্পন্ন হওয়ার পর, আপনাকে Django প্রজেক্টে মাইগ্রেশন চালাতে হবে, যাতে ডাটাবেস টেবিল তৈরি হতে পারে।
১. মাইগ্রেশন চালানো
python manage.py migrate
এটি Django এর ডিফল্ট অ্যাপ্লিকেশন এবং আপনার প্রোজেক্টের জন্য প্রাথমিক ডাটাবেস টেবিল তৈরি করবে।
সারাংশ
- SQLite: ডিফল্ট ডাটাবেস, কোন অতিরিক্ত কনফিগারেশন প্রয়োজন হয় না।
- MySQL: শক্তিশালী ডাটাবেস,
mysqlclientবাPyMySQLড্রাইভার দিয়ে সংযোগ। - PostgreSQL: ওপেন সোর্স, শক্তিশালী ডাটাবেস,
psycopg2ড্রাইভার দিয়ে সংযোগ।
Django প্রজেক্টে SQLite, MySQL, বা PostgreSQL যেকোনো একটি ডাটাবেস ব্যবহার করতে পারেন এবং এর কনফিগারেশন settings.py ফাইলে পরিবর্তন করে এটি কাস্টমাইজ করা হয়।
Django প্রজেক্টে Static Files (যেমন CSS, JavaScript, এবং ইমেজ ফাইল) এবং Media Files (যেমন ইউজার-আপলোড করা ফাইল) পরিচালনা করার জন্য কিছু কনফিগারেশন প্রয়োজন। Django প্রজেক্টে Static এবং Media ফাইল কনফিগারেশন সঠিকভাবে না করলে, সেগুলি ওয়েবসাইটে সঠিকভাবে লোড হবে না।
Static Files কনফিগারেশন
Static Files হল সেই ফাইলগুলো যেগুলি প্রজেক্টের মধ্যে পরিবর্তিত হয় না এবং সরাসরি ব্রাউজারে ক্লায়েন্টকে সরবরাহ করা হয়। যেমন CSS ফাইল, JavaScript ফাইল, এবং ছবি। Django তে static files পরিচালনা করার জন্য কিছু নির্দিষ্ট কনফিগারেশন প্রয়োজন।
১. Static Files কনফিগারেশন
settings.py ফাইলে Static Files কনফিগার করার জন্য, নিম্নলিখিত সেটিংস যুক্ত করুন:
# settings.py
STATIC_URL = '/static/'
# Development environment এর জন্য, Static Files collect করতে
STATICFILES_DIRS = [
BASE_DIR / "static",
]
# Production environment এর জন্য, Static Files collect করা হবে
STATIC_ROOT = BASE_DIR / "staticfiles"
STATIC_URL: এই সেটিংটি ব্রাউজারে Static ফাইলের URL নির্ধারণ করে। সাধারণত/static/পাথ ব্যবহার করা হয়।STATICFILES_DIRS: এখানে আপনি আপনার স্ট্যাটিক ফাইলগুলির অবস্থান উল্লেখ করেন। এটি ডেভেলপমেন্ট পরিবেশে Static ফাইলগুলো সরবরাহ করতে ব্যবহৃত হয়।STATIC_ROOT: এটি প্রোডাকশন পরিবেশে স্ট্যাটিক ফাইলগুলো একত্রিত (collect) করার জন্য ব্যবহৃত হয়। যখন আপনিpython manage.py collectstaticকমান্ড চালান, তখন Django এই ফাইলগুলোSTATIC_ROOTফোল্ডারে কপি করে।
২. Static Files ব্যবহার করা
আপনার টেমপ্লেট ফাইলে Static ফাইলগুলো ব্যবহার করতে {% load static %} ট্যাগ ব্যবহার করতে হবে। উদাহরণস্বরূপ, যদি আপনি একটি CSS ফাইল লিংক করতে চান:
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">
এখানে, {% static 'css/style.css' %} Django কে জানায় যে এটি Static ফোল্ডার থেকে ফাইলটি লোড করবে।
৩. Static Files সংগ্রহ করা (Production)
প্রোডাকশন পরিবেশে স্ট্যাটিক ফাইলগুলো একত্রিত (collect) করার জন্য, নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
python manage.py collectstatic
এই কমান্ডটি সমস্ত Static ফাইলগুলো STATIC_ROOT ডিরেক্টরিতে কপি করবে, যেখানে আপনার প্রোডাকশন সার্ভার থেকে সেগুলি সরবরাহ করা হবে।
Media Files কনফিগারেশন
Media Files হল ইউজাররা যেসব ফাইল আপলোড করে (যেমন ইমেজ, ভিডিও, ডকুমেন্ট ইত্যাদি)। এগুলি Django অ্যাপ্লিকেশনের মাধ্যমে ক্লায়েন্টদের কাছে সরবরাহ করা হয়।
১. Media Files কনফিগারেশন
settings.py ফাইলে Media Files কনফিগার করার জন্য, নিম্নলিখিত সেটিংস যুক্ত করুন:
# settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
MEDIA_URL: এটি মিডিয়া ফাইলের জন্য URL পাথ। সাধারণত/media/ব্যবহার করা হয়।MEDIA_ROOT: এটি মিডিয়া ফাইলগুলো কোথায় সংরক্ষণ হবে, তার অবস্থান। এখানে আপনি সাধারণত একটিmediaফোল্ডার তৈরি করেন।
২. মিডিয়া ফাইল আপলোড করা
আপনার Django মডেলগুলিতে FileField বা ImageField ব্যবহার করে মিডিয়া ফাইল আপলোড করা যেতে পারে। উদাহরণস্বরূপ:
from django.db import models
class Profile(models.Model):
name = models.CharField(max_length=100)
profile_picture = models.ImageField(upload_to='profile_pictures/')
এখানে upload_to প্যারামিটারটি নির্দেশ করে যে আপলোড হওয়া ছবি কোথায় সংরক্ষণ হবে, যেমন media/profile_pictures/।
৩. মিডিয়া ফাইল সার্ভ করা (Development)
ডেভেলপমেন্ট পরিবেশে মিডিয়া ফাইলগুলো সরবরাহ করতে, আপনাকে urls.py ফাইলে মিডিয়া ফাইলগুলো সরবরাহ করার জন্য কনফিগারেশন করতে হবে:
# urls.py
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# আপনার অন্যান্য URL প্যাটার্ন এখানে থাকবে
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
এটি নিশ্চিত করবে যে ডেভেলপমেন্ট পরিবেশে আপনি মিডিয়া ফাইলগুলোর অ্যাক্সেস পাবেন।
সারাংশ
Django তে Static এবং Media ফাইল কনফিগারেশন সঠিকভাবে করা হলে, আপনার অ্যাপ্লিকেশন দ্রুত এবং কার্যকরভাবে স্ট্যাটিক ফাইল এবং ইউজার-আপলোড করা মিডিয়া ফাইল সরবরাহ করতে সক্ষম হবে। Static ফাইলগুলো সাধারণত CSS, JavaScript, এবং ইমেজ ফাইল থাকে, এবং Media ফাইলগুলো ইউজারদের আপলোড করা ফাইল (যেমন ছবি বা ডকুমেন্ট)। ডেভেলপমেন্ট এবং প্রোডাকশন পরিবেশে এই ফাইলগুলো সঠিকভাবে পরিচালনা করার জন্য আপনাকে উপরের কনফিগারেশনগুলো অনুসরণ করতে হবে।
Django অ্যাপ্লিকেশন তৈরি করার সময়, এর Debug Mode এবং Security Settings খুবই গুরুত্বপূর্ণ। এগুলো Django অ্যাপ্লিকেশনের নিরাপত্তা এবং ডেভেলপমেন্ট পরিবেশে কার্যকারিতা নিশ্চিত করে। এখানে আমরা Django-র Debug Mode এবং Security Settings সম্পর্কিত বিষয়গুলো বিস্তারিতভাবে আলোচনা করব।
Debug Mode
Django-তে Debug Mode ডেভেলপমেন্ট এবং ডিবাগিংয়ের জন্য ব্যবহৃত হয়। যখন এটি সক্রিয় থাকে, তখন Django স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশনের ত্রুটি ও সমস্যাগুলি প্রদর্শন করে, যা ডেভেলপারদের দ্রুত সমস্যার সমাধান করতে সাহায্য করে। তবে এটি প্রোডাকশন (Production) পরিবেশে সক্রিয় রাখা উচিত নয়, কারণ এতে সিস্টেমের নিরাপত্তা ঝুঁকিতে পড়তে পারে।
১. Debug Mode চালু করা
ডিফল্টভাবে, Django প্রজেক্ট তৈরির পর Debug Mode সক্রিয় থাকে। এটি আপনার settings.py ফাইলে DEBUG কনফিগারেশন দ্বারা নিয়ন্ত্রিত হয়।
settings.py ফাইলে DEBUG এর মান যদি True থাকে, তাহলে Debug Mode চালু থাকে:
DEBUG = True
২. Debug Mode বন্ধ করা
প্রোডাকশন পরিবেশে, Debug Mode বন্ধ করতে DEBUG এর মান False করতে হয়:
DEBUG = False
Debug Mode-এর ঝুঁকি
- ডাটা লিক (Data Leak): যদি
DEBUG = Trueথাকে, তবে Django অ্যাপ্লিকেশনটি ত্রুটির তথ্য এবং স্ট্যাক ট্রেস (stack trace) ব্যবহারকারীকে দেখাতে পারে, যা সুরক্ষিত নয়। - অফলাইনে প্রদর্শন: Debug Mode চালু থাকলে, Django-র সাথে সংযুক্ত সার্ভারটি সকল ত্রুটি এবং লোগ তৈরি করে, যা সম্ভাব্য আক্রমণকারীদের জন্য দুর্বলতা তৈরি করতে পারে।
অতএব, Debug Mode প্রোডাকশন পরিবেশে কখনোই চালু রাখা উচিত নয়।
Security Settings
Django অ্যাপ্লিকেশনটি সুরক্ষিত রাখার জন্য কিছু নির্দিষ্ট Security Settings প্রয়োজন। কিছু গুরুত্বপূর্ণ নিরাপত্তা কনফিগারেশন এইরকম:
১. ALLOWED_HOSTS
এই সেটিংটি Django-তে ব্যবহৃত সাইটের host নামগুলো নির্ধারণ করে। এটি প্রোডাকশন পরিবেশে বিশেষভাবে গুরুত্বপূর্ণ, কারণ এটি ম্যালিসিয়াস (অবৈধ) ডোমেইন থেকে HTTP রিকোয়েস্ট ব্লক করে।
settings.py ফাইলে ALLOWED_HOSTS এ আপনার সাইটের নাম অথবা আইপি অ্যাড্রেস লিখুন:
ALLOWED_HOSTS = ['www.yoursite.com', 'yoursite.com', '127.0.0.1']
যদি আপনি ALLOWED_HOSTS সঠিকভাবে কনফিগার না করেন, তাহলে আপনার Django অ্যাপ্লিকেশন হ্যাকিংয়ের শিকার হতে পারে।
২. SECURE_SSL_REDIRECT
আপনার Django সাইটে নিরাপদ HTTPS সংযোগে রিডাইরেক্ট করার জন্য এই সেটিংটি ব্যবহার করা হয়। যখন এটি True হয়, তখন HTTP রিকোয়েস্ট স্বয়ংক্রিয়ভাবে HTTPS এ রিডাইরেক্ট হবে।
SECURE_SSL_REDIRECT = True
এটি শুধু তখনই কাজ করবে যখন আপনার সাইটে SSL সার্টিফিকেট ইনস্টল করা থাকে।
৩. SECURE_BROWSER_XSS_FILTER
এই সেটিংটি ব্রাউজারকে সিএসএস (Cross-Site Scripting) আক্রমণ ব্লক করার নির্দেশ দেয়। এটি True থাকলে, ব্রাউজার নিজেই সিএসএস আক্রমণ রোধ করবে।
SECURE_BROWSER_XSS_FILTER = True
৪. SECURE_CONTENT_TYPE_NOSNIFF
এই সেটিংটি ব্রাউজারকে মেনু অথবা অন্য ধরনের কনটেন্ট স্নিফিং থেকে বিরত রাখে। এটি True করলে কনটেন্ট টাইপ গুলি সঠিকভাবে যাচাই করা হবে, যাতে নিরাপত্তার ঝুঁকি কমে।
SECURE_CONTENT_TYPE_NOSNIFF = True
৫. CSRF_COOKIE_SECURE
CSRF (Cross-Site Request Forgery) আক্রমণ থেকে সুরক্ষা প্রদান করার জন্য এই সেটিংটি ব্যবহৃত হয়। যদি True থাকে, তবে CSRF টোকেনটি কেবলমাত্র HTTPS কানেকশনের মাধ্যমে প্রেরিত হবে।
CSRF_COOKIE_SECURE = True
৬. SESSION_COOKIE_SECURE
এটি সেট করলে, Django Session Cookie গুলি শুধুমাত্র HTTPS কানেকশনে পাঠাবে, যা নিরাপত্তা বৃদ্ধি করবে।
SESSION_COOKIE_SECURE = True
৭. X_FRAME_OPTIONS
এই সেটিংটি আপনার Django অ্যাপ্লিকেশনকে clickjacking আক্রমণ থেকে রক্ষা করে। এটি DENY বা SAMEORIGIN হতে পারে।
X_FRAME_OPTIONS = 'DENY'
DENY: এটি আপনার অ্যাপ্লিকেশনকে অন্য কোনো ওয়েবসাইটে iframe হিসেবে লোড হতে দেয় না।SAMEORIGIN: এটি কেবলমাত্র একই ডোমেইনে থাকা ওয়েবসাইটে iframe হিসাবে লোড হতে অনুমতি দেয়।
৮. SECURE_HSTS_SECONDS
HTTP Strict Transport Security (HSTS) সিকিউরিটি ফিচারটি ব্রাউজারকে HTTPS ব্যবহার করতে বাধ্য করে। এটি প্রোডাকশন পরিবেশে ব্যবহার করা উচিত।
SECURE_HSTS_SECONDS = 31536000 # 1 year
এটি ব্রাউজারকে নির্দেশ দেয় যে তারা শুধুমাত্র HTTPS কানেকশনই ব্যবহার করবে, এবং এটি ১ বছরের জন্য কার্যকর থাকবে।
৯. SECURE_HSTS_INCLUDE_SUBDOMAINS
এই সেটিংটি, HSTS নীতি সমস্ত সাবডোমেইনেও প্রয়োগ করবে।
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
সারাংশ
Debug Mode প্রোডাকশন পরিবেশে False রাখতে হয় যাতে কোনো সংবেদনশীল তথ্য বাইরে না চলে যায়। সঠিক Security Settings কনফিগার করে, আপনি Django অ্যাপ্লিকেশনটি নিরাপদ রাখতে পারেন। এসব নিরাপত্তা সেটিংস প্রোডাকশন পরিবেশে ডাটা নিরাপত্তা এবং আক্রমণ থেকে রক্ষা করতে গুরুত্বপূর্ণ ভূমিকা পালন করে।
Read more